# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'SelectPattern.ui'
#
# Created: Mon Jan 13 15:59:12 2014
#      by: PyQt4 UI code generator 4.8.3
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui
import os
import fnmatch
import subprocess
import platform

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

def ToUTF(s1, s2):
    return QtGui.QApplication.translate(s1, s2, None, QtGui.QApplication.UnicodeUTF8)

sel_file = None

def GetPatternName(iface, show):
    if globals()['sel_file'] == None:
        dlg = SelectPatternDialog(iface)
        dlg.SetFolder()
        dlg.exec_()
        if dlg.Selected != True:
            return None
        else:
            return globals()['sel_file']
    else:
        if show != True:
            return globals()['sel_file']
        else:
            dlg = SelectPatternDialog(iface)
            dlg.SetFolder()
            dlg.exec_()
            if dlg.Selected != True:
                return None
            else:
                return globals()['sel_file']
    return None

class SelectPatternDialog(QtGui.QDialog):
    iface = None
    Selected = False
    Files = []

    def __init__(self, iface):
        self.iface = iface
        Selected = False

        QtGui.QDialog.__init__(self)                                          # Вызываем Конструктор родителя
        self.resize(430, 300)                                                 # Устанавливаем размеры окна
        self.setMinimumSize(QtCore.QSize(430, 300))
        self.setMaximumSize(QtCore.QSize(430, 300))
        self.listBox = QtGui.QListWidget(self)                                # Создаём список для отображения шаблонов
        self.listBox.setGeometry(QtCore.QRect(0, 0, 256, 301))
        self.btnSelectPattern = QtGui.QPushButton(self)                       # Кнопка для выбора шаблона
        self.btnSelectPattern.setGeometry(QtCore.QRect(270, 210, 120, 24))
        self.btnOpenPattern = QtGui.QPushButton(self)                         # Кнопка для открытия шаблона во внешней программе
        self.btnOpenPattern.setGeometry(QtCore.QRect(270, 240, 120, 24))
        self.btnCancel = QtGui.QPushButton(self)                              # Кнопка Отмена
        self.btnCancel.setGeometry(QtCore.QRect(270, 270, 120, 24))
        self.btnSelectFolder = QtGui.QPushButton(self)                        # Кнопка выбора папки с шаблонами
        self.btnSelectFolder.setGeometry(QtCore.QRect(270, 180, 120, 24))

        self.retranslateUi()                                                  # Установка надписей на кнопках

        # Установка обработчиков событий кнопок
        QtCore.QObject.connect(self.btnCancel, QtCore.SIGNAL(_fromUtf8("pressed()")), self.btnCancel_Click)
        QtCore.QObject.connect(self.btnOpenPattern, QtCore.SIGNAL(_fromUtf8("pressed()")), self.btnOpenPattern_Click)
        QtCore.QObject.connect(self.btnSelectFolder, QtCore.SIGNAL(_fromUtf8("pressed()")), self.btnSelectFolder_Click)
        QtCore.QObject.connect(self.btnSelectPattern, QtCore.SIGNAL(_fromUtf8("pressed()")), self.btnSelectPattern_Click)
        QtCore.QMetaObject.connectSlotsByName(self)
        return

    # Установка надписей на элементах управления в окне
    def retranslateUi(self):
        self.setWindowTitle(QtGui.QApplication.translate("Select pattern dialog", "Pattern selection"))
        self.btnSelectPattern.setText(QtGui.QApplication.translate("Select pattern dialog", "Select"))
        self.btnOpenPattern.setText(QtGui.QApplication.translate("Select pattern dialog", "Show"))
        self.btnCancel.setText(QtGui.QApplication.translate("Select pattern dialog", "Cancel"))
        self.btnSelectFolder.setText(QtGui.QApplication.translate("Select pattern dialog", "Select folder"))
        return

    # Обработчик нажатия на кнопку Отмена
    def btnCancel_Click(self):
        Selected = False
        self.close()
        return

    # Обработчик нажатия на кнопку Открыть
    def btnOpenPattern_Click(self):
        # TODO: Сделать проверку ОС
        if platform.system() == 'Linux':
            #str = u"/bin/sh -c lowriter \"{0}\"".format(self.Files[self.listBox.currentRow()])
            #QtGui.QMessageBox.information(self.iface.mainWindow(), QtGui.QApplication.translate("Module name", "Landex"), str)
            ret = subprocess.call([u"/bin/sh", u"-c", u"lowriter \"{0}\"".format(self.Files[self.listBox.currentRow()])])
        else:
            ret = subprocess.call([u"lowriter \"{0}\"".format(self.Files[self.listBox.currentRow()])])
        return

    # Обработчик нажатия на кнопку Выбрать папку
    def btnSelectFolder_Click(self):
        self.SetFolder()
        return

    # Обработчик нажатия на кнопку Выбрать
    def btnSelectPattern_Click(self):
        if self.listBox.count() == 0:
            QtGui.QMessageBox.warning(self.iface.mainWindow(), QtGui.QApplication.translate("Module name", "Landex"), QtGui.QApplication.translate("Select pattern dialog", "Nothing selected!!!!!"))
            return

        self.Selected = True
        globals()['sel_file'] = self.Files[self.listBox.currentRow()]
        self.close()
        return

    # Выбор папки и создание списка файлов
    def SetFolder(self):
        directory = QtGui.QFileDialog.getExistingDirectory(self.iface.mainWindow(), QtGui.QApplication.translate("Select pattern dialog", "Patterns folder selection"), '')

        if directory == '':
            QtGui.QMessageBox.information(self.iface.mainWindow(), QtGui.QApplication.translate("Module name", "Landex"), QtGui.QApplication.translate("Select pattern dialog", "Folder not selected!!!"))
            return

        self.ClearList()

        for d, dirs, files in os.walk(directory):
            for f in files:
                if fnmatch.fnmatch(f, '*.odt'):
                    self.listBox.addItem(f)
                    self.Files.append(os.path.join(d, f))

    # Очистка списков файлов
    def ClearList(self):
        self.Files = []
        self.listBox.clear()
        return